import QtQuick 2.6
import QtQuick.Controls 2.0
import io.qt.examples.backend 1.0

ApplicationWindow {
    id: root
    width: 300
    height: 480
    visible: true

    //实例化C++ class
    BackEnd {
        id: backend
        onUserNameChanged: console.log("收到来自C++的信号2")// 这种直接绑定的槽，只能在BackEnd中进行定义，否则需要使用Connections，如下
        onSignalTest: console.log("收到颜色信号")
    }

    Connections
    {
        target: backend
        onUserNameChanged: {
            console.log("收到来自C++的信号")
            backend.myTestInvokableFunc()
            backend.myTestPublicSlotsFunc()
            backend.testEnum(BackEnd.MyRed)
            backend.testEnum(BackEnd.MyBlack)
        }
        onSignalTest: console.log("收到颜色信号2", colorParam)
    }

    //文本输入框
    TextField {
        // 该操作叫 property binding ，当TextField实例化时，会 使用 BackEnd 的函数 READ userName，
        // 同时，在BackEnd中，必须有NOTIFY userNameChanged，该NOTIFY在 BackEnd 进行emit userNameChanged();时，
        // 会通知qml中的property binding 重新访问 BackEnd 的函数 READ userName，从而更新绑定的值
        text: backend.userName

        placeholderText: qsTr("User name")
        anchors.centerIn: parent

        //当文本框的值改变后，将值传给backend类
        onTextChanged: backend.userName = text  //使用该函数 WRITE setUserName
    }
}
